#include<stdio.h> #include<string.h> #define minn(a,b) a > b ? a : b ;
structStudent { char name[50]; int solve ; int pro[20] ; int pass[20] ; int ifdo[20] ; bool sub ; bool vis ; }team[5005],temp;
intbianli(char *m, int n) { int i; for(i = 1; i <= n; ++ i) { if(strcmp(team[i].name,m) == 0 ) return i ; } return0 ; }
intPenalty(Student a,int n) { int i ; int sum = 0 ; for(i = 1; i < n + 1 ; ++ i ) { if(a.ifdo[i] != 0 && a.pass[i] >= 0 ) sum += a.pro[i]; } return sum ; }
intSame(Student a , Student b , int n) { if(Penalty(a,n) == Penalty(b,n) && a.solve == b.solve) return1 ; else return0 ; }
voidPrint(Student *team , int n , int near , int cnt ) { int i , k ; printf("Rank Who Solved Penalty"); for(i = 0 ; i < n ; ++ i) printf(" %c",i + 'A') ; printf("\n") ; for(i = 1; i < cnt + 1 ; ++ i) { if(team[i].vis == 0) break ; else { if(Same(team[i],team[i - 1],n)) printf("%4d",near); else { near = i ; printf("%4d",i) ; } } printf(" %43s",team[i].name) ; printf(" %6d",team[i].solve) ; printf(" %7d",Penalty(team[i],n)) ; for(k = 1 ; k < n + 1 ; ++ k) { if(team[i].ifdo[k] == 0) printf(" "); else { if(team[i].pass[k] > 0) printf(" +%d",team[i].pass[k]) ; if(team[i].pass[k] < 0) printf(" %d",team[i].pass[k]) ; if(team[i].pass[k] == 0) printf(" +") ; } } printf("\n") ; } }